package AssetPurchaseRequest

import (
	"ToolLibray/jwtx"
	"context"
	"github.com/zeromicro/go-zero/core/logx"
	"property_api/internal/svc"
	"property_api/internal/types"
	"property_api/utils/result"
	"property_api/utils/xform"
	"property_service/property_service"
)

type AddLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddLogic {
	return &AddLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// Add 添加采购申请单的逻辑
func (l *AddLogic) Add(req *types.AssetPurchaseRequest) (resp *types.Response, err error) {
	// 设置租户ID，从上下文中获取
	tenantID := jwtx.GetUserTenantId64(l.ctx)
	// 设置创建用户和更新用户，从上下文中获取
	userIdStr := xform.Int64ToString(jwtx.GetUserId(l.ctx))

	//获取科室名称
	ss, err := l.svcCtx.BasicService.HospitalDepartmentPage(l.ctx, &property_service.HospitalDepartmentPageReq{
		Page:  0,
		Limit: 0,
		Where: &property_service.HospitalDepartment{
			ID:       req.RequestDeptID,
			TenantID: tenantID,
		},
	})
	// 如果服务层返回错误，返回统一的错误响应
	if err != nil {
		return result.Err(err).End()
	}
	req.RequestDept = ss.List[0].Name

	// 调用服务层方法，添加采购申请单记录
	// 服务层方法 AssetPurchaseRequestAdd 会处理实际的数据库插入操作
	res, err := l.svcCtx.AssetService.AssetPurchaseRequestAdd(l.ctx, &property_service.AssetPurchaseRequest{
		RequestCode:    req.RequestCode,    // 申请单号
		PurchaseMonth:  req.PurchaseMonth,  // 购置年月
		RequestType:    req.RequestType,    // 申请类型
		RequestTypeID:  req.RequestTypeID,  //申请类型ID
		PlanNumber:     req.PlanNumber,     // 计划号
		RequestDept:    req.RequestDept,    // 申请科室
		RequestDeptID:  req.RequestDeptID,  // 申请科室id
		Applicant:      req.Applicant,      // 申请人
		ApplicantID:    req.ApplicantID,    // 申请人id
		CompileDate:    req.CompileDate,    // 编制日期
		Remarks:        req.Remarks,        // 备注
		PurchaseStatus: req.PurchaseStatus, // 采购状态（0-申请 1-成功）
		StatusID:       req.StatusID,       // 状态ID(关联状态表StatusDisposition)
		StatusName:     req.StatusName,     // 采购状态（0-申请 1-成功）  审核
		StockID:        req.StockID,        // 仓库ID
		TenantID:       tenantID,           // 租户ID
		CreatedAtuser:  userIdStr,          // 创建人
		UpdatedAtuser:  userIdStr,          // 更新人
	})

	// 如果服务层返回错误，返回统一的错误响应
	if err != nil {
		return result.Err(err).End()
	}

	resp, err = result.Suc(res).End()
	//获取调用返回的id
	resp.Data = map[string]any{
		"id": res.Id,
	}
	// 返回成功的响应
	return resp, err
}
